//
// Created by 田建昆 on 2020/12/11.
//
#include "utils.h"

#define MAX_JUMP 128

struct Jmp {
    jmp_buf* jmp_stack[MAX_JUMP];
    int size;
    int n;
};

static struct Jmp *jmp;

static void initJmp() {
    jmp = malloc(sizeof(struct Jmp));
    jmp->size = MAX_JUMP;
    jmp->n = 0;
}

void jmp_stack_push(jmp_buf* jmpbufferr) {
    if (jmp == NULL) {
        initJmp();
    }
    if (jmp->n >= jmp->size) {
        fprintf(stderr, "more than max jump!\n");
        exit(1);
    }
    jmp->jmp_stack[jmp->n++] = jmpbufferr;
}

jmp_buf *jmp_stack_pop() {
    return jmp->jmp_stack[--jmp->n];
}


